window.app = {

    /**
     * 后端服务发布的url地址
     */
    serverUrl: 'http://192.168.1.87:8080',
    //serverUrl: 'http://192.168.200.126:8080',
    //serverUrl: 'http://192.168.3.73:8080',

    /**
     * 图片服务器的url地址
     */
    imgServerUrl: 'http://192.168.1.87:8090/team/',
    //imgServerUrl: 'http://192.168.200.126:8090/team/',
    //imgServerUrl: 'http://192.168.3.73:8090/team/',

    /**
     * web socket 服务器地址
     */
    webSocketServerUrl: 'ws://192.168.1.87:8081/ws',
    //webSocketServerUrl: 'ws://192.168.200.126:8081/ws',
    //webSocketServerUrl: 'ws://192.168.3.73:8081/ws',

    /**
     * 和后端的枚举对应
     */
    CONNECT: 1,         //第一次(或重连)初始化连接
    CHAT: 2,            //聊天消息
    SIGNED: 3,          //消息签收
    KEEPALIVE: 4,       //客户端保持心跳
    PULL_FRIEND: 5,     //拉取好友

    /**
     * 和后端的pojo保持一致
     * @param senderId
     * @param receiverId
     * @param msg
     * @param msgId
     * @constructor
     */
    ChatMsg: function (senderId, receiverId, msg, msgId) {
        this.senderId = senderId;
        this.receiverId = receiverId;
        this.msg = msg;
        this.msgId = msgId;
    },

    /**
     * 保存用户的聊天记录
     * @param myId
     * @param friendId
     * @param msg
     * @param isRead true 已读 false 未读
     * @param msgId 消息id
     * @param flag 判断本条消息是谁发送的 1我 2朋友
     */
    saveUserChatHistory: function (myId, friendId, msg, flag,isRead,msgId) {
        var me = this;
        var chatKey = "chat-" + myId + "-" + friendId;
        //从本地缓存获取聊天记录是否存在
        var chatHistoryListStr = plus.storage.getItem(chatKey);
        var chatHistoryList;
        if (me.isNotNull(chatHistoryListStr)) {
            chatHistoryList = JSON.parse(chatHistoryListStr);
        } else {
            //如果为空 赋值一个空的list
            chatHistoryList = [];
        }
        //构建聊天对象
        var chatHistory = new me.ChatHistory(myId, friendId, msg, flag,isRead,msgId);
        //向list中追加msg对象
        chatHistoryList.push(chatHistory);
        console.log("保存用户聊天记录 聊天记录key : " + chatKey);
        console.log("保存用户聊天记录 : " + JSON.stringify(chatHistoryList));
        //保存到缓存中
        plus.storage.setItem(chatKey, JSON.stringify(chatHistoryList));
    },

    /**
     * 从缓存中获取聊天记录
     * @param myId
     * @param friendId
     * @returns
     */
    getUserChatHistory: function (myId, friendId) {
        var me = this;
        var chatKey = "chat-" + myId + "-" + friendId;
        var chatHistoryListStr = plus.storage.getItem(chatKey);
        var chatHistoryList;
        if (me.isNotNull(chatHistoryListStr)) {
            chatHistoryList = JSON.parse(chatHistoryListStr);
        } else {
            //如果为空 赋值一个空的list
            chatHistoryList = [];
        }
        console.log("获取用户聊天记录 聊天记录key : " + chatKey);
        return chatHistoryList;
    },

    /**
     * 保存用户聊天快照 最后一条消息
     * @param myId
     * @param friendId
     * @param msg
     * @param isRead false未读 true已读
     */
    saveUserChatSnapshot: function (myId, friendId, msg, isRead) {
        var me = this;
        var chatKey = "chat-snapshot-" + myId;
        //从本地缓存获取聊天记录是否存在
        var chatChatSnapshotListStr = plus.storage.getItem(chatKey);
        var chatChatSnapshotList;
        if (me.isNotNull(chatChatSnapshotListStr)) {
            chatChatSnapshotList = JSON.parse(chatChatSnapshotListStr);
            //循环list 判断friendId是否存在 如果存在则删除后重新添加 为了保证顺序
            for (var i = 0; i < chatChatSnapshotList.length; i++) {
                var chatChatSnapshot = chatChatSnapshotList[i];
                if (chatChatSnapshot.friendId === friendId) {
                    //从第I个元素删除 删除1个
                    chatChatSnapshotList.splice(i, 1);
                    break;
                }
            }
        } else {
            //如果为空 赋值一个空的list
            chatChatSnapshotList = [];
        }
        //构建聊天快照对象
        var chatSnapshot = new me.ChatSnapshot(myId, friendId, msg, isRead);
        //向list中追加聊天快照对象 追加到第一位
        chatChatSnapshotList.unshift(chatSnapshot);
        console.log("保存聊天快照信息 : " + JSON.stringify(chatChatSnapshotList));
        //保存到缓存中
        plus.storage.setItem(chatKey, JSON.stringify(chatChatSnapshotList));
    },

    //直接保存快照列表
    saveChatSnapshot: function (myId,chatSnapshotList){
        console.log("重新设置聊天快照信息");
        var chatKey = "chat-snapshot-" + myId;
        //保存到缓存中
        plus.storage.setItem(chatKey, JSON.stringify(chatSnapshotList));
    },

    /**
     * 获取用户快照记录
     * @param myId
     * @returns {Array}
     */
    getUserChatSnapshot: function (myId) {
        var me = this;
        var chatKey = "chat-snapshot-" + myId;
        //从本地缓存获取聊天记录是否存在
        var chatChatSnapshotListStr = plus.storage.getItem(chatKey);
        console.log("获取聊天快照信息 : " + chatChatSnapshotListStr);
        var chatChatSnapshotList;
        if (me.isNotNull(chatChatSnapshotListStr)) {
            chatChatSnapshotList = JSON.parse(chatChatSnapshotListStr);
        } else {
            //如果为空 赋值一个空的list
            chatChatSnapshotList = [];
        }
        return chatChatSnapshotList;
    },

    /**
     * 消息模型对象 和后端pojo保持一致
     * @param action
     * @param chatMsg
     * @param extand
     * @constructor
     */
    DataContent: function (action, chatMsg, extand) {
        this.action = action;
        this.chatMsg = chatMsg;
        this.extand = extand;
    },

    /**
     * 快照对象
     * @param myId
     * @param friendId
     * @param msg
     * @param isRead  false未读 true已读
     * @constructor
     */
    ChatSnapshot: function (myId, friendId, msg, isRead) {
        this.myId = myId;
        this.friendId = friendId;
        this.msg = msg;
        this.isRead = isRead;
    },

    /**
     * 聊天记录模型对象
     * @param myId
     * @param friendId
     * @param isRead true 已读 false 未读
     * @param msgId 消息id
     * @param flag 判断本条消息是谁发送的 1我 2朋友
     * @constructor
     */
    ChatHistory: function (myId, friendId, msg, flag,isRead,msgId) {
        this.myId = myId;
        this.friendId = friendId;
        this.msg = msg;
        this.flag = flag;
        this.isRead = isRead;
        this.msgId = msgId;
    },


    /**
     * 判断字符串是否为空
     * true 不为空 false 为空
     */
    isNotNull: function (str) {
        if (str != null && str != "" && str != undefined) {
            return true;
        } else {
            return false;
        }
    },

    /**
     * 登录状态失效 返回登录页面
     */
    returnLogin: function () {
        app.showToast("登录过期,请重新登录", "error");
        mui.openWindow("login.html", "login.html");
    },

    /**
     * 提示信息
     */
    showToast: function (msg, type) {
        plus.nativeUI.toast(msg,
            {icon: "image/" + type + ".png", verticalAlign: "center"})
    },

    /**
     * 保存用户的全局对象
     */
    setUserGlobalInfo: function (user) {
        var userInfoStr = JSON.stringify(user);
        plus.storage.setItem("userInfo", userInfoStr)
    },

    /**
     * 获取联系人信息 并保存联系人的全局对象
     */
    setContactList: function () {
        var me = this;

        var user = me.getUserGlobalInfo();
        console.log("发送ajax拉取好友列表 用户id为 : "+user.id);
        mui.ajax(me.serverUrl + "/friend/getMyFriends", {
            data:{
                userId : user.id
            },
            dataType:'json',//服务器返回json格式数据
            type:'post',//HTTP请求类型
            timeout:10000,//超时时间设置为10秒；
            headers: {'Content-Type': 'application/x-www-form-urlencoded'},
            success:function(data){
                if (data.status == 200) {
                    console.log("获取联系人列表");
                    console.log(JSON.stringify(data));
                    var contactList = data.data;
                    var contactInfoStr = JSON.stringify(contactList);
                    plus.storage.setItem("contact", contactInfoStr)
                }else{
                    me.showToast(data.msg, "error");
                    return false;
                }
            }
        });



    },

    /**
     * 获取联系人的全局对象
     */
    getContactList: function () {
        var contactInfoStr = plus.storage.getItem("contact");
        var contact = JSON.parse(contactInfoStr);
        return contact;
    },

    //根据朋友id 获取用户信息
    getFriendInfoById: function (friendId) {
        var me = this;
        //获取联系人列表
        var contactList = me.getContactList();
        console.log("根据朋友id 获取用户信息 "+JSON.stringify(contactList));
        //遍历联系人寻找id一样的
        for (var l = 0; l < contactList.length; l++) {
            var contact = contactList[l];
            //如果id一样
            if (contact.id === friendId) {
                console.log("根据朋友id : " + friendId + "  获取用户信息 : " + JSON.stringify(contact));
                return contact;
            }
        }
    },

    /**
     * 获取用户的全局对象
     */
    getUserGlobalInfo: function () {
        var userInfoStr = plus.storage.getItem("userInfo");
        var user = JSON.parse(userInfoStr);
        return user;
    },

    /**
     * 系统初始化相关的方法
     */
    refresh: function () {
        // 触发自定义事件 激活请求获取好友请求列表
        var myfaceWebview = plus.webview.getWebviewById("chart-List.html");
        mui.fire(myfaceWebview, "reloadRequest");
    },

    /**
     * 清空缓存数据
     */
    delUserGlobalInfo: function () {
        console.log("清空缓存记录");
        // 触发另外一个webview的自定义事件，可以使用 mui.fire()
        var myfaceWebview = plus.webview.getWebviewById("chart-List.html");
        mui.fire(myfaceWebview, "refresh");
        //清空缓存
        /*plus.storage.removeItem("userInfo");
        plus.storage.removeItem("contact");*/
        plus.storage.clear();
    },
};